#include <Arduino.h>
#include <WiFi.h>
#include "weather.h"  //定义Weather类，用于解析Json数据并返回天气数据

//WIFI
#define WIFI_SSID "lckfb"         //要连接的WIFI名称
#define WIFI_PASSWORD "12345678"  //要连接的WIFI密码
#define WIFI_RETRY_COUNT  20      //WIFI连接重试数

//和风天气预报
#define USER_KEY      "d89d4706adcc4fb89d6f166cb420ee39" //密钥
#define LOCATION_ID   "101280601"  //地点标识：深圳

int weatherid;      //根据和风天气API返回的天气ID显示对应天气
bool is_day = 1;    //白天为1，夜晚为0
bool is_today = 1;  //今天为1，明天为0

//创建天气对象
Weather weather(USER_KEY, LOCATION_ID);

//根据和风天气API返回天气标识
void WeatherIcon(int weatherid)
{
    switch(weatherid)
    {
        case 100://白天晴
            Serial.println("白天晴\r\n");
            break;
        case 101://多云
        case 102://少云
        case 151://夜间多云
        case 152://夜间少云
        case 103://晴间多云
            Serial.println("多云\r\n");
            break;
        case 104://阴天
            Serial.println("阴天\r\n");
            break;
        case 150://夜间晴朗
            Serial.println("夜间晴朗\r\n");
            break;
        case 153://夜间晴间多云
            Serial.println("夜间多云\r\n");
            break;
        case 305://小雨
        case 309://毛毛雨/细雨
            Serial.println("小雨\r\n");
            break;
        case 300://阵雨
        case 350://夜间阵雨
        case 306://中雨
        case 399://雨
        case 313://冻雨
        case 314://小到中雨
            Serial.println("阵雨\r\n");
            break;
        case 301://强阵雨
        case 351://夜间强阵雨
        case 307://大雨
        case 308://极端降雨
        case 310://暴雨
        case 311://大暴雨
        case 312://特大暴雨
        case 315://中到大雨
        case 316://大到暴雨
        case 317://暴雨到大暴雨
        case 318://大暴雨到特大暴雨
            Serial.println("大雨\r\n");
            break;
        case 302://雷阵雨
            Serial.println("雷阵雨\r\n");
            break;
        case 303://强雷阵雨
            Serial.println("强雷阵雨\r\n");
            break;

        //雪天
        case 400://小雪
        case 401://中雪
        case 402://大雪
        case 403://暴雪
        case 404://雨夹雪
        case 405://雨雪天气
        case 406://阵雨夹雪
        case 407://阵雨夹雪
        case 408://小到中雪
        case 409://中到大雪
        case 410://雪
        case 456://阵雨夹雪
        case 457://阵雪
        case 499://雪
            Serial.println("雪天\r\n");
            break;

        //雾霾
        case 500://薄雾
        case 501://雾
        case 509://浓雾
        case 510://强浓雾
        case 514://大雾
        case 515://特强浓雾
            Serial.println("雾天\r\n");
            break;
        case 502://霾
        case 511://中度霾
        case 512://重度霾
        case 513://严重霾
            Serial.println("雾霾\r\n");
            break;
    }
}

void setup() 
{
  int count = 0;
  char disp_buf[50]={0};

  //串口初始化
  Serial.begin(9600);

  //尝试连接WIFI网络
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD); 
  //尝试连接直至超时
  while (WiFi.status() != WL_CONNECTED) 
  {
    count++;
    if (count > WIFI_RETRY_COUNT)
    {
      Serial.println("\r\nconnection failed.\r\n");
      break;
    }
    delay(500);
    Serial.print(".");
  }

  //获取天气数据
  weather.update();

  //WIFI断开连接
  WiFi.disconnect();

  //显示最低与最高温度
  sprintf(disp_buf, "TempMin = %d", weather.getTempMin(is_today));
  Serial.println(disp_buf);
  sprintf(disp_buf, "TempMax = %d", weather.getTempMax(is_today));
  Serial.println(disp_buf);

  //显示天气标识代码
  sprintf(disp_buf, "WeatherCode = %d", weather.getWeather(is_today, is_day));
  Serial.println(disp_buf);

  //根据天气标识代码确定天气
  WeatherIcon(weather.getWeather(is_today, is_day));
}

void loop() 
{
  delay(1000);
}
